home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1998…eptember: Technology Seed / September 98 ADC Seed CD.toast / Language Analysis Manager / DarumaDR1Package / Examples / LanguageAnalysisTestApp / Sources / Events.c < prev    next >
Encoding:
C/C++ Source or Header  |  1998-03-27  |  12.2 KB  |  507 lines  |  [TEXT/CWIE]

  1. /*
  2.     File:        Analysis.c
  3.  
  4.      Contains:    Sample code for Language Analysis Manager.
  5.  
  6.      Version:    Technology:    System 8
  7.                  Release:    Daruma Developer Release 1
  8.  
  9.      Copyright:    1998 by Apple Computer, Inc., all rights reserved
  10.  
  11.      Contact:    daruma@apple.com
  12.  
  13. */
  14.  
  15.  
  16. #include "TestApp.h"
  17. #include "FunctionProto.h"
  18.  
  19. #include <Menus.h>
  20. #include <Devices.h>
  21. #include <TextUtils.h>
  22. #include <Resources.h>
  23. #include <Scrap.h>
  24.  
  25. // ========================================================================================
  26. // Global variables
  27. // ========================================================================================
  28. static Boolean        gQuitNow;
  29.  
  30. // ========================================================================================
  31. // Prototypes for static functions
  32. // ========================================================================================
  33. static void DoInputDialogEvent ( EventRecord *theEvent );
  34. static void DoRegularEvent ( EventRecord *theEvent );
  35. static void HandleMenus ( long menuResult );
  36. static void AdjustMenus ( void );
  37. static void ChangeDefautItem( DialogRef dialog, SInt16 newDefaultItem );
  38. static void DoQuit( void );
  39.  
  40. // ========================================================================================
  41. // MainEventLoop
  42. // ========================================================================================
  43. void MainEventLoop ( void )
  44. {
  45.     EventRecord        theEvent;
  46.     Boolean            gotEvent;
  47.     Boolean            eventProcessed;
  48.     Boolean            consoleClosed;
  49.     
  50.     gQuitNow = false;
  51.     
  52.     while ( true)
  53.     {
  54.         gotEvent = WaitNextEvent( everyEvent, &theEvent, 0L, nil);
  55.         
  56.         eventProcessed = ProcessConsoleWindowEvent( &theEvent, &consoleClosed);
  57.         
  58.         if ( !eventProcessed && gotEvent)
  59.         {
  60.             if ( ( theEvent.what == keyDown) && ( theEvent.modifiers & cmdKey) )
  61.             {
  62.                 AdjustMenus();
  63.                 HandleMenus( MenuKey( theEvent.message & charCodeMask));
  64.                 eventProcessed = true;
  65.             }
  66.         }
  67.         
  68.         if ( !eventProcessed)
  69.         {
  70.             if ( IsDialogEvent( &theEvent))
  71.             {
  72.                 if ( IsInputDialog( FrontWindow()))
  73.                     DoInputDialogEvent( &theEvent);
  74.             }
  75.             else
  76.             {
  77.                 DoRegularEvent( &theEvent);
  78.             }
  79.         }
  80.         
  81.         if ( gQuitNow)
  82.         {
  83.             DoQuit();
  84.             break;
  85.         }
  86.     }
  87. }
  88.  
  89.  
  90. // ========================================================================================
  91. // DoInputDialogEvent
  92. // ========================================================================================
  93. static void DoInputDialogEvent ( EventRecord *theEvent )
  94. {
  95.     DialogRef            dialog = gInputDialog->dialog;
  96.     InputDialogPtr        dialogInfoPtr = gInputDialog;
  97.     short                itemHit;
  98.     Boolean                eventProcessed = false;
  99.     WindowRef            whichWindow;
  100.     OSStatus            err;
  101.     
  102.     if ( theEvent->what == mouseDown &&
  103.          FindWindow( theEvent->where, &whichWindow) == inContent &&
  104.          whichWindow != FrontWindow())
  105.     {
  106.         SelectWindow( whichWindow);
  107.     }
  108.  
  109.     eventProcessed = StdFilterProc( dialog, theEvent, &itemHit);
  110.  
  111.     if ( !eventProcessed)
  112.     {
  113.         eventProcessed = DialogSelect( theEvent, &dialog, &itemHit);
  114.     }
  115.  
  116.     if ( eventProcessed && dialog != NULL)
  117.     {
  118.         switch ( itemHit)
  119.         {
  120.         case kConvertBtnDItemID:
  121.             err = DoMorphemeAnalysis( dialogInfoPtr);
  122.             dialogInfoPtr->converted = ( err == noErr);
  123.             dialogInfoPtr->curCandNum = 1;
  124.             SelectDialogItemText( dialog, kInputEditTextDItemID, 0, 255);
  125.             if ( err == noErr)
  126.             {
  127.                 ChangeDefautItem( dialog, k1stCandBtnDItemID);
  128.             }
  129.             break;
  130.             
  131.         case k1stCandBtnDItemID:
  132.             if ( dialogInfoPtr->converted)
  133.             {
  134.                 PrintBundle( &dialogInfoPtr->analysisBundle,
  135.                              dialogInfoPtr->curAnalysisClass, 1);
  136.                 dialogInfoPtr->curCandNum = 1;
  137.             }
  138.             ChangeDefautItem( dialog, kNextCandBtnDItemID);
  139.             break;
  140.             
  141.         case kNextCandBtnDItemID:
  142.             if ( dialogInfoPtr->converted)
  143.             {
  144.                 dialogInfoPtr->curCandNum++;
  145.                 
  146.                 PrintBundle( &dialogInfoPtr->analysisBundle,
  147.                              dialogInfoPtr->curAnalysisClass,
  148.                              dialogInfoPtr->curCandNum);
  149.             }
  150.             break;
  151.             
  152.         case kAllCandBtnDItemID:
  153.             if ( dialogInfoPtr->converted)
  154.             {
  155.                 PrintBundle( &dialogInfoPtr->analysisBundle,
  156.                              dialogInfoPtr->curAnalysisClass, 0);
  157.             }
  158.             break;
  159.             
  160.         case kEnvironPopupDItemID:
  161.             SetAnalysisEnvironment( dialogInfoPtr);
  162.             break;
  163.             
  164.         case kInputEditTextDItemID:
  165.             ChangeDefautItem( dialog, kConvertBtnDItemID);
  166.             break;
  167.             
  168.         default: break;
  169.         }
  170.     }
  171. }
  172.  
  173.  
  174. // ========================================================================================
  175. // ChangeAnalysisMethod
  176. // ========================================================================================
  177. void ChangeAnalysisMethod ( short newMode )
  178. {
  179.     InputDialogPtr        dialogInfoPtr = gInputDialog;
  180.     DialogRef            dialog = dialogInfoPtr->dialog;
  181.     Handle                itemHandle;
  182.     
  183.     if ( newMode == gAnalysisMode) return;
  184.     
  185.     if ( newMode == kBatchAnalysisMode)
  186.     {
  187.         HideDialogItem( dialog, kInputStatTextDItemID);
  188.         ShowDialogItem( dialog, k1stCandBtnDItemID);
  189.         ShowDialogItem( dialog, kNextCandBtnDItemID);
  190.         ShowDialogItem( dialog, kAllCandBtnDItemID);
  191.         ShowDialogItem( dialog, kCandTitleDItemID);
  192.     }
  193.     else
  194.     {
  195.         HideDialogItem( dialog, k1stCandBtnDItemID);
  196.         HideDialogItem( dialog, kNextCandBtnDItemID);
  197.         HideDialogItem( dialog, kAllCandBtnDItemID);
  198.         HideDialogItem( dialog, kCandTitleDItemID);
  199.         itemHandle = GetDialogItemHandle( dialog, kInputStatTextDItemID);
  200.         SetDialogItemText( itemHandle, "\p");
  201.         ShowDialogItem( dialog, kInputStatTextDItemID);
  202.     }
  203.     
  204.     ChangeDefautItem( dialogInfoPtr->dialog, kConvertBtnDItemID);
  205.     
  206.     gAnalysisMode = newMode;
  207. }
  208.  
  209.  
  210. // ========================================================================================
  211. // DoRegularEvent
  212. // ========================================================================================
  213. static void DoRegularEvent ( EventRecord *theEvent )
  214. {
  215.     WindowRef        whichWindow;
  216.     short            partCode;
  217.     
  218.     switch ( theEvent->what)
  219.     {
  220.     case mouseDown:
  221.         partCode = FindWindow( theEvent->where, &whichWindow);
  222.         
  223.         switch ( partCode )
  224.         {
  225.         case inMenuBar:
  226.             AdjustMenus();
  227.             HandleMenus( MenuSelect( theEvent->where));
  228.             break;
  229.             
  230.         case inSysWindow: 
  231.             SystemClick( theEvent, whichWindow);
  232.             break;
  233.  
  234.         case inDrag:
  235.             if ( whichWindow != FrontWindow())
  236.                 SelectWindow( whichWindow);
  237.             DragWindow( whichWindow, theEvent->where, &(*GetGrayRgn())->rgnBBox);
  238.             break;
  239.             
  240.         case inContent:
  241.             if ( whichWindow != FrontWindow())
  242.                 SelectWindow( whichWindow);
  243.             break;        
  244.  
  245.         default:
  246.             break;
  247.         }
  248.         break;
  249.     
  250.     case updateEvt:
  251.     case activateEvt:
  252.     case nullEvent:
  253.         break;
  254.     
  255.     default:
  256.         break;
  257.     }
  258. }
  259.  
  260.  
  261. // ========================================================================================
  262. // HandleMenus
  263. // ========================================================================================
  264. static void HandleMenus ( long menuResult )
  265. {
  266.     short                menuID, menuItem;
  267.     Str255                itemName;
  268.     long                sizeNum;
  269.     short                level;
  270.     Handle                itemHandle;
  271.     
  272.     if ( menuResult == 0) return;
  273.     
  274.     menuID = ( ( menuResult >> 16) & 0x0000FFFF);
  275.     menuItem = ( menuResult & 0x0000FFFF);
  276.     
  277.     switch ( menuID)
  278.     {
  279.     case kAppleMenuID:
  280.         switch ( menuItem)
  281.         {
  282.         case kAboutMenuItemID:
  283.             break;
  284.         default:
  285.             GetMenuItemText( GetMenuHandle( menuID), menuItem, itemName);
  286.             OpenDeskAcc( itemName);
  287.             break;
  288.         }
  289.         break;
  290.         
  291.     case kFileMenuID:
  292.         switch ( menuItem)
  293.         {
  294.         case kQuitMenuItemID:
  295.             gQuitNow = true;
  296.             break;
  297.         default:
  298.             break;
  299.         }
  300.         break;
  301.     
  302.     case kEditMenuID:
  303.         if ( IsInputDialog( FrontWindow()))
  304.         {
  305.             switch ( menuItem)
  306.             {
  307.             case kCutMenuItemID:
  308.                 ZeroScrap();
  309.                 DialogCut( gInputDialog->dialog);
  310.                 TEToScrap();
  311.                 break;
  312.             case kCopyMenuItemID:
  313.                 ZeroScrap();
  314.                 DialogCopy( gInputDialog->dialog);
  315.                 TEToScrap();
  316.                 break;
  317.             case kPasteMenuItemID:
  318.                 TEFromScrap();
  319.                 DialogPaste( gInputDialog->dialog);
  320.                 break;
  321.             case kClearMenuItemID:
  322.                 DialogDelete( gInputDialog->dialog);
  323.                 break;
  324.             case kSelectAllMenuItemID:
  325.                 SelectDialogItemText( gInputDialog->dialog, kInputEditTextDItemID, 0, 255);
  326.                 break;
  327.             default:
  328.                 break;
  329.             }
  330.         }
  331.         break;
  332.         
  333.     case kConsoleMenuID:
  334.         switch ( menuItem)
  335.         {
  336.         case kClearConsoleMenuItemID:
  337.             ClearConsoleWindowContent( gConsoleWindow);
  338.             break;
  339.         default:
  340.             break;
  341.         }
  342.         break;
  343.     
  344.     case kOptionMenuID:
  345.         switch ( menuItem)
  346.         {
  347.         case kBatchMenuItemID:
  348.             ChangeAnalysisMethod( kBatchAnalysisMode);
  349.             CheckItem( GetMenuHandle( menuID), kBatchMenuItemID, true);
  350.             CheckItem( GetMenuHandle( menuID), kContinuousMenuItemID, false);
  351.             break;
  352.             
  353.         case kContinuousMenuItemID:
  354.             ChangeAnalysisMethod( kContinuousAnalysisMode);
  355.             CheckItem( GetMenuHandle( menuID), kBatchMenuItemID, false);
  356.             CheckItem( GetMenuHandle( menuID), kContinuousMenuItemID, true);
  357.             break;
  358.             
  359.         default:
  360.             break;
  361.         }
  362.         break;
  363.             
  364.     case kLevelMenuID:
  365.         UncheckAllMenuItems( menuID);
  366.         CheckItem( GetMenuHandle( menuID), menuItem, true);
  367.         if ( menuItem == kLevelZeroMenuItemID)
  368.             level = 0;
  369.         else
  370.             level = menuItem - kLevelOneMenuItemID + 1;
  371.         SetAnalysisLevel( gInputDialog, level);
  372.         break;
  373.     
  374.     case kSampleMenuID:
  375.         GetIndString( itemName, kSampleStrResID, menuItem);
  376.         itemHandle = GetDialogItemHandle( gInputDialog->dialog, kInputEditTextDItemID);
  377.         SetDialogItemText( itemHandle, itemName);
  378.         SelectDialogItemText( gInputDialog->dialog, kInputEditTextDItemID, 0, 255);
  379.         ChangeDefautItem( gInputDialog->dialog, kConvertBtnDItemID);
  380.         break;
  381.         
  382.     case kFontMenuID:
  383.         GetMenuItemText( GetMenuHandle( menuID), menuItem, itemName);
  384.         SetConcoleWindowFont( gConsoleWindow, itemName, true);
  385.         UncheckAllMenuItems( menuID);
  386.         CheckItem( GetMenuHandle( menuID), menuItem, true);
  387.         break;
  388.         
  389.     case kSizeMenuID:
  390.         GetMenuItemText( GetMenuHandle( menuID), menuItem, itemName);
  391.         StringToNum( itemName, &sizeNum);
  392.         SetConcoleWindowFontSize( gConsoleWindow, (SInt16)sizeNum, true);
  393.         UncheckAllMenuItems( menuID);
  394.         CheckItem( GetMenuHandle( menuID), menuItem, true);
  395.         break;
  396.         
  397.     default:
  398.         break;
  399.     }
  400.     
  401.     HiliteMenu( 0);
  402. }
  403.  
  404.  
  405. // ========================================================================================
  406. // AdjustMenus
  407. // ========================================================================================
  408. static void AdjustMenus ( void )
  409. {
  410.     // Do nothing for now
  411. }
  412.  
  413.  
  414. // ========================================================================================
  415. // UncheckAllMenuItems
  416. // ========================================================================================
  417. void UncheckAllMenuItems ( short menuID )
  418. {
  419.     short        menuCount, i;
  420.     MenuRef        targetMenu;
  421.     
  422.     targetMenu = GetMenuHandle( menuID);
  423.     menuCount = CountMItems( targetMenu);
  424.  
  425.     for ( i = 1; i <= menuCount; ++i)
  426.     {
  427.         CheckItem( targetMenu, i, false);
  428.     }
  429. }
  430.  
  431.  
  432. // ========================================================================================
  433. // ChangeDefautItem
  434. // ========================================================================================
  435. static void ChangeDefautItem( DialogRef dialog, SInt16 newDefaultItem )
  436. {
  437.     GrafPtr            savePort;
  438.     short            itemType;
  439.     Handle            itemHandle;
  440.     Rect            itemRect;
  441.     static SInt16    gCurDefaultItem = kConvertBtnDItemID;
  442.     RgnHandle        targetRgn, tempRgn;
  443.  
  444.     if ( gAnalysisMode != kBatchAnalysisMode)
  445.     {
  446.         return; // since all buttons except "Convert" are hidden
  447.     }
  448.     
  449.     if ( newDefaultItem != gCurDefaultItem)
  450.     {
  451.         GetPort( &savePort);
  452.         SetPort( dialog);
  453.         
  454.         SetDialogDefaultItem( dialog, newDefaultItem);
  455.         
  456.         targetRgn = NewRgn();
  457.         tempRgn = NewRgn();
  458.         
  459.         GetDialogItem( dialog, gCurDefaultItem, &itemType, &itemHandle, &itemRect);
  460.         RectRgn( tempRgn, &itemRect);
  461.         InsetRect( &itemRect, -6, -6);
  462.         RectRgn( targetRgn, &itemRect);
  463.         DiffRgn( targetRgn, tempRgn, targetRgn);
  464.         EraseRgn( targetRgn);
  465.         
  466.         GetDialogItem( dialog, newDefaultItem, &itemType, &itemHandle, &itemRect);
  467.         RectRgn( tempRgn, &itemRect);
  468.         InsetRect( &itemRect, -6, -6);
  469.         RectRgn( targetRgn, &itemRect);
  470.         DiffRgn( targetRgn, tempRgn, targetRgn);
  471.         InvalRgn( targetRgn);
  472.         
  473.         DisposeRgn( targetRgn);
  474.         DisposeRgn( tempRgn);
  475.  
  476.         gCurDefaultItem = newDefaultItem;
  477.         
  478.         SetPort( savePort);
  479.     }
  480. }
  481.  
  482.  
  483. // ========================================================================================
  484. // DoQuit
  485. // ========================================================================================
  486. static void DoQuit( void )
  487. {
  488.     DialogRef            dialog = gInputDialog->dialog;
  489.     InputDialogPtr        dialogInfoPtr = gInputDialog;
  490.  
  491.     if ( dialogInfoPtr->analysisBundle.descriptorType != typeNull)
  492.         AEDisposeDesc( &dialogInfoPtr->analysisBundle);
  493.  
  494.     if ( dialogInfoPtr->analysisPath.descriptorType != typeNull)
  495.         AEDisposeDesc( &dialogInfoPtr->analysisPath);
  496.         
  497.     ReleaseAnalysisContext( dialogInfoPtr);
  498.     CloseDialog( dialog);
  499.     DisposePtr( (Ptr)dialogInfoPtr);
  500.  
  501.     DisposeConsoleWindow( gConsoleWindow);
  502.  
  503.     return;
  504. }
  505.  
  506.  
  507.